#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    // 创建UI组件
    imageLabel = new QLabel("请打开一张图片");
    openButton = new QPushButton("打开图片");
    processButton = new QPushButton("处理图片");

    // 连接信号和槽
    connect(openButton, &QPushButton::clicked, this, &MainWindow::openImage);
    connect(processButton, &QPushButton::clicked, this, &MainWindow::processImage);

    // 创建布局
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(imageLabel);
    layout->addWidget(openButton);
    layout->addWidget(processButton);

    // 设置中心窗口部件
    QWidget *centralWidget = new QWidget;
    centralWidget->setLayout(layout);
    setCentralWidget(centralWidget);

    // 设置窗口标题和大小
    setWindowTitle("Qt + OpenCV 示例");
    resize(800, 600);
}

MainWindow::~MainWindow()
{
}

void MainWindow::openImage()
{
    // 使用文件对话框选择图片
    QString fileName = QFileDialog::getOpenFileName(this,
        tr("打开图片"), "", tr("图片文件 (*.png *.jpg *.bmp)"));

    if (!fileName.isEmpty()) {
        // 使用OpenCV读取图片
        currentImage = cv::imread(fileName.toStdString());

        if (!currentImage.empty()) {
            // 将OpenCV的Mat转换为QImage
            cv::Mat rgbImage;
            cv::cvtColor(currentImage, rgbImage, cv::COLOR_BGR2RGB);
            QImage qImage(rgbImage.data, rgbImage.cols, rgbImage.rows,
                         rgbImage.step, QImage::Format_RGB888);

            // 显示图片
            imageLabel->setPixmap(QPixmap::fromImage(qImage).scaled(
                imageLabel->size(), Qt::KeepAspectRatio));
        }
    }
}

void MainWindow::processImage()
{
    if (!currentImage.empty()) {
        // 使用OpenCV处理图片（例如，应用Canny边缘检测）
        cv::Mat grayImage, edges;
        cv::cvtColor(currentImage, grayImage, cv::COLOR_BGR2GRAY);
        cv::Canny(grayImage, edges, 50, 150);

        // 将处理后的图像转换为QImage并显示
        QImage qImage(edges.data, edges.cols, edges.rows,
                     edges.step, QImage::Format_Grayscale8);

        imageLabel->setPixmap(QPixmap::fromImage(qImage).scaled(
            imageLabel->size(), Qt::KeepAspectRatio));
    }
}


